package com.booksystem.controller;

import com.booksystem.common.RestResult;
import com.booksystem.dto.*;
import com.booksystem.dto.CategoryAddDTO;
import com.booksystem.dto.CategoryDeleteDTO;
import com.booksystem.dto.CategoryEditDTO;
import com.booksystem.dto.CategoryQueryDetailDTO;
import com.booksystem.dto.CategoryQueryListDTO;
import com.booksystem.entity.CategoryDO;
import com.booksystem.service.CategoryService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import java.util.List;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * <p>
 * 商品分类控制器
 * </p>
 * @author 段伟豪
 */
@RestController
@RequestMapping("/category")
@Api(tags = "商品分类管理")
public class CategoryController {

    @Autowired
    private CategoryService categoryService;

    /**
     * 新增商品分类
     *
     * @param categoryAddDTO 新增分类参数
     * @return RestResult 结果集
     */
    @PostMapping("/add")
    @ApiOperation("新增商品分类")
    public RestResult<Boolean> addCategory(@Valid @RequestBody CategoryAddDTO categoryAddDTO) {
        return categoryService.addCategory(categoryAddDTO);
    }

    /**
     * 编辑商品分类
     *
     * @param categoryEditDTO 编辑分类参数
     * @return RestResult 结果集
     */
    @PutMapping("/edit")
    @ApiOperation("编辑商品分类")
    public RestResult<Boolean> editCategory(@Valid @RequestBody CategoryEditDTO categoryEditDTO) {
        return categoryService.editCategory(categoryEditDTO);
    }

    /**
     * 删除商品分类
     *
     * @param categoryDeleteDTO 删除分类参数
     * @return RestResult 结果集
     */
    @DeleteMapping("/delete")
    @ApiOperation("删除商品分类")
    public RestResult<Boolean> deleteCategory(@Valid @RequestBody CategoryDeleteDTO categoryDeleteDTO) {
        return categoryService.deleteCategory(categoryDeleteDTO);
    }

    /**
     * 查询商品分类列表
     *
     * @param categoryQueryListDTO 查询参数
     * @return RestResult 结果集
     */
    @GetMapping("/list")
    @ApiOperation("查询商品分类列表")
    public RestResult<List<CategoryDO>> listCategories(CategoryQueryListDTO categoryQueryListDTO) {
        return categoryService.listCategories(categoryQueryListDTO);
    }

    /**
     * 查询商品分类详情
     *
     * @param categoryQueryDetailDTO 查询参数
     * @return RestResult 结果集
     */
    @GetMapping("/detail")
    @ApiOperation("查询商品分类详情")
    public RestResult<CategoryDO> getCategoryDetail(CategoryQueryDetailDTO categoryQueryDetailDTO) {
        return categoryService.getCategoryDetail(categoryQueryDetailDTO);
    }
}